PBR论文(一)A Reflectance Model For Computer Graphics 您所在的位置:网站首页 reflectance mode PBR论文(一)A Reflectance Model For Computer Graphics

PBR论文(一)A Reflectance Model For Computer Graphics

2023-09-30 10:28| 来源: 网络整理| 查看: 265

INTRODUCTION

 

计算机图形学中逼真图像的绘制需要一个物体如何反射光的模型。反射率模型必须描述反射光的颜色和空间分布。该模型独立于图像合成的其他方面,如曲面几何表示和隐藏面算法。

大多数真实的表面既不是理想的高光(镜面)反射,也不是理想的漫(兰伯特)反射。Phong[14,15]提出了一种高光和漫反射的线性组合的计算机图形反射率模型。高光分量通过余弦函数的幂次展开在高光方向上。随后,Blinn[5,6]使用了类似的思想,并结合来自[23]的镜面反射模型,该模型解释了入射光在相对于表面法线的掠射角时出现的非高光峰值。Whitted的[24]通过添加一个术语来扩展这些模型,该术语指的是来自完美光滑表面的理想镜面反射。所有这些模型都是基于几何光学(射线理论)。

phone光照模型:I=I_{pa}K_{a}+\sum \left (I_{pd}K_{d} cosi+I_{ps}K_{s}cos^{n}\theta \right )

blinn-phone光照模型:I=I_{pa}K_{a}+\sum \left (I_{pd}K_{d} cosi+I_{ps}K_{s}(N \cdot H)^{n} \right )

掠射:光从一种介质向另一种介质传播,入射角接近于90度时称之为掠射。

前面的模型将反射视为由三部分组成:环境、漫反射和镜面反射。环境分量表示假定从环境中均匀入射的光,并由表面均匀地向各个方向反射。漫反射和高光成分与来自特定光源的光有关。漫反射分量表示均匀地向各个方向散射的光。高光部分代表高光,光线集中在镜面方向。假设镜面分量为光源的颜色;用菲涅耳方程得到了不同角度光强的变化,而不是颜色化。环境光和漫反射光被认为是材质的颜色。由此产生的模型生成的图像对于某些类型的材质来说是真实的。

提出了一种适用于粗糙表面的反射率模型,该模型比以往的模型更具有通用性。它是基于几何光学,适用于广泛的材料,表面条件和照明情况。这个模型的基础是反射率的定义,它将一个物体的亮度与照亮它的每个光源的强度和大小联系起来。该模型预测了反射光的方向分布和光谱组成。描述了一种从光谱能量分布计算红、绿、蓝(RGB)值的方法。然后将新的反射率模型应用于金属和塑料的模拟,并解释了为什么用以前的模型呈现的图像通常看起来是塑料的,以及如何避免这种塑料外观。

THE REFLECTANCE MODEL

给定光源、表面和观测者,反射率模型描述到达观测者的反射光的强度和光谱组成。反射光的强度是由光源的强度和大小以及材料的反射能力和表面特性决定的。反射光的光谱组成由光源的光谱组成和表面的波长选择性反射决定。在这一节中,介绍了适当的反射率定义,并将其组合成一个通用的反射率模型。图1包含此模型中使用的符号的摘要。

反射的几何图形如图2所示。一个观察者正在观察一个表面上的点P。V是观察者方向上的单位矢量,N是垂直于表面的单位矢量,L是特定光源方向上的单位矢量。H是V和L的角平分线方向上的归一化向量,定义为

                                                                                  H=\frac{V+L}{length(V+L)}

这是一个假设的平面的法向单位它会将光源的光反射到观察者,α是H和N之间的角,θ是H和V之间的角,所以cos(θ)=V•H =L•H。

入射光的能量以光照度表示。出射光的强度以光亮度表示[20,8]。(立体角是光源的投影面积除以到光源距离的平方,对于远处的光源可以看作是常数。)入射光的能量是:

                                                                                     E=I_{i}(N\cdot L)\mathbf{d}\omega _{i}

除反射镜面或近反射镜面外,入射光束会在很大的角度范围内反射。 因此,在任何给定方向上的反射强度取决于入射能量,而不仅取决于入射强度。 给定方向上的反射强度与另一方向(在小立体角内)的入射能量之比称为双向反射率。 该反射率是研究反射的基础(有关其他讨论,请参见[20,8])。 因此,对于每个光源,双向反射率R为:

                                                                                             R=\frac{I_{r}}{E_{i}}

入射光的能量以光照度表示。出射光的强度以光亮度表示。原文是:

The energy of the incident light is expressed as energy per unit time and per unit area of the reflecting surface. The intensity of the incident light is similar, but is expressed per unit projected area and, in addition, per unit solid angle。

没太看懂这个入射光强度,之后说的入射光能量也给了E的公式。

这里的 I_{r}是r方向上的光照强度,且双向反射率R定义的应该不是光照强度而是光亮度(发光表面单位面积在反射方向r上的的光照强度),因此这里我们把 I_{r}作为光亮度。

为什么BRDF要定义成光照度(irradiance)和光亮度(radiance)的比值:

光亮度是在特定方向上的单位面积的光照强度,在测量中我们也通常是用测量仪去测一个表面在特定方向上的光亮度PBR学习笔记(一)小视场、大孔径光学系统的光通量和像面照度:我们眼睛的视杆细胞和视锥细胞识别不同的亮度和颜色由单位面积上光通量也就是光照度所决定,根据这小节的内容我们根据公式很容易可以看出到这个光照度是由物体的光亮度决定的(也可以看出同时也取决于瞳孔大小),因此光亮度就成了一个物体表面所呈现的颜色依据,在渲染中像素的颜色是物体表面的光亮度是一个合理的选择。

对于上述几个问题,这里更新一下:

brdf的作用就是把入射的光照度转换成出射光亮度,而光照度又是由光源的光亮度计算出来的:

L_{i}=\frac{\mathrm{d}\mathbf{F_{i}}}{\cos i \mathrm{d}S_{1}\mathrm{d}\omega_{1} }可得:\mathrm{d}\mathbf{F_{i}}=\cos i \mathrm{d}S_{1}\mathrm{d}\omega_{1}L_{i}(图中S1平面没画斜)

\mathrm{d}S_{1} = \frac{\mathrm{d}\omega _{2}r^{2}}{\cos i}

\mathrm{d}\omega _{1} = \frac{\mathrm{d}S_{2} \cos \alpha }{r^{2}}

由上述式子得E=\frac{\mathrm{d}\mathbf{F_{i}}}{\mathrm{d}{S_{2}}}=L_{i}\cos \alpha\mathrm{d}\omega _{2}

也就是渲染方程中后半部分,因此在离线和实时渲染中,我们都可以用渲染方程来进行光线传输,不断迭代。(更详细可参考The Light Transport Equation)

我们也可以与其它物理量做对比:

我们用的物理量有光通量,光强度,光照度,光出射度和光亮度。

其中描述入射最方便的就是光照度,它描述的是单位面积上照射到表面的光通量。

描述出射的物理量中,光出射度描述的是单位面积上出射所有方向的光通量,而光亮度是在特定方向单位立体角下,单位面积上的光通量。考虑我们不管是在计算单次反射的直接光还是多次反射的间接光,我们接受的时候总是接受此表面某一个方向的光通量,因此光亮度明显是更合理的选择。

从每个光源到达观察者的反射强度:

                                                                               I_{r}=RE_{i}=RI_{i}(N\cdot L)d\omega _{i}

双向反射率可以分为镜面反射和漫反射两个分量。 镜面反射分量代表从材料表面反射的光。 漫反射分量来自内部散射(入射光在该内部散射中穿透材料的表面)或源自多次表面反射(如果表面足够粗糙,则会发生多次反射)。 如果材质不均匀,镜面和漫反射组件可以具有不同的颜色。 因此双向反射率是

                                                                      R=sR_{s}+dR_{d}          其中(s + d = 1)

我们可得反射方向(out方向)的光亮度:L_{o}=\frac{\mathrm{d}\mathbf{F_{o}}}{cos\theta \mathrm{d}S\mathrm{d}w_{o}}=\frac{RE_{i}\mathrm{d}S}{cos\theta \mathrm{d}S\mathrm{d}w_{o}}=\frac{RI_{i}(N\cdot L)dw_{i}}{cos\theta \mathrm{d}w_{o}}

原文中的s*Rs相当于上式的\frac{R}{cos\theta \mathrm{d}w_{o}}

如果把上式写成\frac{sR_{s}}{cos\theta \mathrm{d}w_{o}},相当于原文中s*Rs

(更新,以上是把E作为光照射度计算的,与原文不同)

此处的漫反射表示了内部散射和多次表面反射,但实际上多次表面反射并没有计算在Cook-Torrance公式内,因此计算会损失一部分能量,并且越粗糙越多。具体参考之后的其它论文。

后续还会由次表面散射(以及透射),和此处的漫反射一样原理,区别是漫反射的散射发生在一个像素内,次表面的散射大于一个像素。

次表面散射:和大气的散射(微观粒子的散射,米氏散射、瑞利散射)不同,这里的原因是折射率的快速变化引起散射。

透射:穿过物体。

除了通过独立的光源直接照明,对象可以通过背景或环境光照被照明。从环境光照的任何特定方向朝观察者反射的光量很小,但是当在整个照明角度的半球上积分时效果非常显著。因此,引入环境(或半球方向)反射率Ra很方便。该反射率是双向反射率R的积分,因此是Rs和Rd的线性组合。为简单起见,我们假定Ra与观察方向无关。 另外,我们假设环境照明是均匀入射的。 由环境照明引起的反射强度定义为

                                                                                        I_{ra}=R_{a}I_{ia}f

f项是照明半球未被附近物体(例如角落)阻挡的部分[25]:

                                                                                   f=\frac{1}{\pi} \int (N \cdot L)\mathbf{d}w_{i}

I_{ra}也和之前的I_{r}一样,为ir方向上的光照强度,但我们把它当作L_{ra}也就是光亮度更为准确。

因为不同方向光照强度为I的光照射到表面时计算光照射度需要乘N•L,它在半球面上积分后等于π,而f为未挡住的比值,最大值是1,即完全没被挡住,所以公式需要除以π。

这里其实和漫反射的原理是一样的,在很多地方也是这么解释:

为什么PBR中Lambert光照要除PI? - 知乎

事实上这样是绕了一圈,这里我们换一个更容易理解的角度:

PBR学习笔记(一)应用光学 余弦幅射表面向2π立体角空间发出的总光通量、光亮度和光出射度的关系:

余弦幅射表面(Lambert辐射体)光出射度和光亮度的关系是:

M= \pi L

而我们BRDF描述的是光照度E和光亮度L的比值关系,自然对于余弦辐射体:

L=\frac{1 }{\pi } M = \frac{1 }{\pi } kE

理解了这个关系,我们很简单就可以解释漫反射和f项公式为什么要除以π。

积分是在照明半球的无遮挡部分进行的。

到达观察者的光的总强度是所有光源反射强度加上任何环境光照反射强度的总和。 假设f = 1,则本文使用的基本反射率模型变为

                                                                I_{r}=R_{a}I_{ia} + \sum_{l} I_{il} \left ( N\cdot L_{l} \right ) \mathbf{d} w_{il} \left ( sR_{s} + dR_{d} \right )

该公式考虑了可能照亮场景的具有不同强度和不同投影区域的光源的影响。

本文不考虑环境中其他物体的光反射。

上述反射率模型隐含地取决于几个变量。例如,光照强度取决于波长,s和d取决于材料,反射率取决于这些变量以及反射几何形状和表面粗糙度。 接下来的两个章节考虑了反射率模型的方向和波长依赖性。

波长依赖性大概指的是不同的波长有不同的反射率。

DIRECTIONAL DISTRIBUTION OF THE REFLECTED LIGHT

环境光照和漫散射分量在所有方向上均等地反射光。因此,Ra和Rd不取决于观察者的位置。然而镜面反射分量在某些方向比在其他方向反射更多的光,因此Rs确实取决于观察者的位置。

镜面反射分量的角度分布可以通过假设表面由微面组成,每个微面镜面反射来描述[23]。只有法线在H方向上的面才属于从L到V的镜面反射分量。

                                                                                  R_{s}=\frac{F}{\pi }\frac{DG}{(N\cdot L)(N\cdot V)}

这里Rs的公式分母里面有一个π,但我们常见的公式都是4:

https://www.youtube.com/watch?v=Xi1FZZJ235I

视频中老师说,π做分母使得这看起来和lambert法则类似,但实际数学上计算应该是4(具体计算过程见视频,之后我也会写文章),至于为什么cook选择了π,cook回答说"well i just chose it to turn out that way"

菲涅耳系数F描述了如何从每个光滑的微面反射光。 它是入射角和波长的函数,将在下一节中讨论。

几何衰减因子G解释了一个面对另一面的阴影和遮挡,在[5,6,23]中进行了详细讨论。 简而言之它是

                                                                G=\left \{1, \frac{2(N\cdot H)(N\cdot V)}{(V\cdot H)} , \frac{2(N\cdot H)(N\cdot L)}{(V\cdot H)} \right \}

微表面概率分布函数D表示沿方向H定向的微表面的比例。Blinn[5,6]考虑了各种刻面斜率分布函数。他描述的公式之一是Gaussian模型[23]:

                                                                                             D=ce^{-\left ( \alpha /m \right )^{2}}

m表示微表面的坡度的标准差。α表示沿方向H定向的微表面的坡度(H和N之间的夹角)。

其中c是一个任意常数。

除了Blinn提到的模型外,其他微表面分布模型也是可能的。特别是存在用于从表面散射雷达和红外辐射的模型,这些模型适用于可见波长。例如Davies[9]描述了从由理想电导体制成的粗糙表面反射的电磁辐射的空间分布。 Bennett和Porteus[3]将这些结果扩展到了真正的金属,Torrance和Sparrow[22]证明了它们也适用于非金属。Beckmann[2]提供了涵盖所有这些材料的综合理论,适用于从光滑到非常粗糙的各种表面条件。 对于粗糙表面,Beckmann分布函数为

                                                                                    D=\frac{1}{m^{2}cos^{4}\alpha }e^{-[(tan\alpha)/m]^{2}}

Beckmann-Spizzichino物理光学模型(电磁波理论)和Torrance-Sparrow几何光学模型(短波长的光来简化反射问题)在当时都引起了相当大的关注,下一篇会详细介绍这两个模型。

该分布函数的形状类似于Blinn提到的三个函数。 Beckmann函数的优点在于,它可以在不引入任意常数的情况下提供反射率的绝对大小,缺点是它需要更多的计算。

在所有微表面分布函数中,镜面反射分量的分布取决于斜率m的均方根(rms)。m的较小值表示小平面斜率较小,并且给出了围绕镜面方向高度定向的分布,如图3a中的贝克曼分布模型和图3b中的高斯模型所示。m的大值表示微表面坡度较陡,并给出了分布,如图3c和3d分别对Beckmann模型和Gaussian模型所示。注意两个模型之间的相似性。

反射率的波长依赖性不受表面粗糙度的影响,除了几乎完全光滑的表面外,这是通过物理光学(波理论)描述的,并且具有与波长有关的分布函数D。Beckmann分布模型解释了这种波长依赖性以及物理光学和几何光学之间(即非常光滑的表面和粗糙表面之间)的过渡区域。 为简单起见,我们忽略D与波长有关的情况。(进一步讨论请参阅[2]和[9])

一些表面具有两个或多个尺度的粗糙度或斜率m,可以使用两个或多个分布函数进行建模[16]。在这种情况下,D表示为分布函数的加权和,每个函数的m值不同:

                                                                                          D=\sum _{j} w_{j} D\left ( m_{j} \right )

其中,mj是第j个分布的均方根斜率,wj是第j个分布的权重。这些权重的总和为1。

SPECTRAL COMPOSITION OF THE REFLECTED LIGHT

环境,漫反射和镜面反射率都取决于波长。Ra,Rd和Rs的F项可以从材料的适当反射光谱中获得。尽管Ra被限制为Rs和Rd的线性组合,但对这三种反射率非均质材料可能具有不同的反射光谱。

[10,17-19]中已经测量收集了数千种材料的反射光谱。反射率数据通常用于法向入射时的照明。这些值通常是针对抛光表面测量的,必须乘以1 / π才能获得粗糙表面的双向反射率[20]。大多材料仅在可见范围内的几个波长(通常在10到15之间)进行测量,因此必须对中间波长的值进行插值(简单的线性插值似乎就足够了)。在选择反射光谱时,必须仔细考虑测量时的条件,例如一些金属随着时间的推移会形成氧化层,这会极大地改变颜色[1]。

必须乘以1 / π才能获得粗糙表面的双向反射率。

不太明白什么意思,可能是说理想光滑表面反射波瓣是集中的一条线,而理想粗糙表面是一个完美的圆。因此粗糙表面出射光的光亮度L=\frac{1 }{\pi } M = \frac{1 }{\pi } kE,其中k是光滑表面的反射率。

反射光的光谱能量分布是通过将入射光的光谱能量分布乘以表面的反射光谱得到的。图b显示了一个示例。在[7]中可以得到太阳的光谱能量分布和许多CIE标准光源。CIE标准光源D6500的光谱能量分布近似于阴天日照,如图b所示。下面的曲线是CIE标准光源D6500照射的铜镜在正常入射时反射的光谱能量分布。将上面的曲线乘以图a中的反射谱得到。

附一张日常光源的光谱,上图a和b单位是微米。

一般来说,Rd和F随反射的几何形状而变化。为方便起见,我们随后将Rd取为垂直于反射面方向的用于照明的双向反射系数。这是合理的,因为反射率在入射角70度范围内仅略有变化[21]。但是我们考虑到F的方向依赖性,当入射和反射方向接近掠射角时会导致颜色偏移。

反射率F可以从理论上由菲涅耳方程求得[21]。这个方程用折射率(n)、消光系数(k)和光照度角(θ)来表示一个非常光滑的镜子般表面的反射率。通常n和k都随波长变化,但它们的值一般是未知的。另一方面,正常入射时的反射率的实验测量值通常是已知的。

为了得到F的光谱和角度变化,我们采用了一种实际的折衷方法。如果n和k已知,我们用菲涅耳方程。如果不是,但法向反射率是已知的,我们拟合菲涅耳方程的测量法向反射率抛光表面。对于非金属,且k = 0,这立即给我们折射率n的估计值。对于金属k通常不为0,我们设k为0,并从正常反射率得到n的有效值。从菲涅耳方程中可以得到F的角度依赖关系。上述方法可以得到正入射时的正确的F值,并很好地估计出它的角度相关性,而角度相关性只对消光系数k有微弱的依赖性。

为了说明这个过程,k = 0时无偏振入射光的菲涅尔方程为:

                                                                         F = \frac{1}{2}\frac{(g-c)^{2}}{(g+c)^{2}}\left \{ 1 + \frac{\left [c(g+c) -1 \right ]^{2}}{\left [c(g-c) + 1 \right ]^{2}} \right \}

其中

                                                                                          c = \cos \theta = \overrightarrow{V}\cdot \overrightarrow{H}

                                                                                          g^{2}=n^{2}+c^{2}-1

从法线方向入射时,θ = 0,所以c = 1 ,g= n,此时

                                                                                           F_{0}=\left \{ \frac{n -1}{n +1} \right \}^{2}

得:

                                                                                            n = \frac{1 + \sqrt{F_{0}}}{1 - \sqrt{F_{0}}}

将由此确定的n值代入原始菲涅耳方程,得到其他入射角度的反射率F。这个过程可以在其他波长重复,以获得反射率的光谱和方向依赖性。

反射率与波长和入射角的关系表明,反射光的颜色随着入射角的变化而变化。铜的反射光谱如图a所示。当入射角(θ)接近π/2时,反射光的颜色接近光源的颜色(因为各波长反射率F接近统一)。在图b中,对应于铜质白光(CIE标准光源D6500)反射的颜色显示为θ的函数。很明显,只有当θ接近π/2时(当V和L的夹角趋近于π时),菲涅耳方程的颜色偏移才变得重要。

计算色移是计算昂贵的。它可以通过以下两种方式之一进行简化:通过创建查找表或使用以下近似。F的值首先计算一个n值对应的平均法向反射率。这些值被用来在材料θ = 0时的颜色和θ = π/2时的颜色之间进行插值,π/2是光源的颜色,因为F_{\pi /2}在每个波长都是1.0。例如,重做法线方向入射时颜色的红色分量,并将入射光的颜色的红色分量改为Red_{\pi /2 }。那么这个颜色在其他角度上的红色分量是

                                                                  Red_{\theta } =Red_{0 } +(Red_{\pi /2 }-Red_{0 })\frac{max(0, F_{\theta }-F_{0})}{F_{\pi /2 }-F_{0}}

绿色和蓝色的分量也相同方法插值。图c显示了使用近似程序估计铜颜色作为入射角的函数的效果。近似过程产生的结果与来自完整过程的结果相似(图b)。如果不知道反射光的光谱能量分布则必须使用上述近似,在这种情况下所有的RGB值都是估计值。

(未完)

Refrence(文中引用请参考论文原文)

[1]Cook R L , Torrance K E . A Reflectance Model for Computer Graphics[J]. ACM Transactions on Graphics, 1982, 1(1):7-24.

[2]Nayar S K , Ikeuchi K . Surface reflection: physical and geometrical perspectives[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 1991, 13(7):P.611-634.

[3]https://en.wikipedia.org/wiki/Radiance

[4]毛星云. 【基于物理的渲染(PBR)白皮书】(四)法线分布函数相关总结 【基于物理的渲染(PBR)白皮书】(四)法线分布函数相关总结 - 知乎

[5]The Light Transport Equation



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有